package com.cskaoyan.javase.oop2._1extends._8hidden.notice;

import java.util.Calendar;

/**
 * 1.父子类中的同名成员变量它们各自有存储的区域
 * 父类的同名成员变量被子类同名成员变量隐藏了，称之为"属性的隐藏"。
 * 但我们仍然可以通过父类中的Getter方法，或者通过super去访问到父类中同名成员变量
 * 当然它们都受访问权限限制。
 *
 *
 * 2.static的成员变量
 *      静态成员变量,父子类之间不属于继承,
 *      存在以下两种情况:
 *      a.如果父类中有静态成员变量,那么父子类就共用了父类的静态成员变量
 *      a.如果父子类中有同名的静态成员变量,那么父子类各用各自的
 *      总结来说,就是静态成员变量属于类,它没有继承的概念.
 *
 * @since 11:35
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Cat c = new Cat();
        System.out.println(c.age);
        System.out.println(c.getAge());
        c.superAge();
        System.out.println("-------------------");
        System.out.println(Animal.num);
        System.out.println(Cat.num);
        Animal.var = 777;
        System.out.println(Cat.var);
        Cat.num = 300;
        System.out.println(Animal.num);
        System.out.println(Cat.num);

        /*
            以下两种创建对象的方式
            它们的引用的数据类型不同
            这样
            c2引用是子类引用仍然能访问子类中的成员
            但是a引用是父类引用,就只能访问父类中的成员
            所以区别就是
            父类引用会限制子类对象的访问范围
         */
        Animal a = new Cat();
        Cat c2 = new Cat();
    }
}

class Animal {
    static int var = 666;
    static int num = 100;
    int age = 18;

    public int getAge() {
        return age;
    }
}

class Cat extends Animal {
    static int num = 200;
    int age = 28;

    public void superAge() {
        System.out.println(super.age);
    }
}